//----------------------------------------------------------------------------
//   The confidential and proprietary information contained in this file may
//   only be used by a person authorised under and to the extent permitted
//   by a subsisting licensing agreement from ARM Limited or its affiliates.
//
//          (C) COPYRIGHT [2018] ARM Limited or its affiliates.
//              ALL RIGHTS RESERVED
//
//   This entire notice must be reproduced on all copies of this file
//   and copies of this file may only be made by a person if such person is
//   permitted to do so under the terms of a subsisting license agreement
//   from ARM Limited or its affiliates.
//----------------------------------------------------------------------------

#ifndef __CAPTURE_DNG_PARAMS_H__
#define __CAPTURE_DNG_PARAMS_H__
/*
 * Apical(ARM) V4L2 test application 2016
 *
 * This is debugging purpose SW tool running on JUNO.
 */

/* definitions for fixed values */
#define CFA_WIDTH   2
#define CFA_HEIGHT  2
#define BLACK_LEVEL_WIDTH   1
#define BLACK_LEVEL_HEIGHT  1


/* CFA order */
typedef enum {
    V4L2_TEST_CFA_ORDER_RGGB = 0,
    V4L2_TEST_CFA_ORDER_GRBG = 1,
    V4L2_TEST_CFA_ORDER_GBRG = 2,
    V4L2_TEST_CFA_ORDER_BGGR = 3,
    V4L2_TEST_CFA_ORDER_MAX
} cfa_order_t;

/* exposure program */
enum {
    EXIF_EXPOSURE_PROGRAM_NOT_DEFINED           = 0,
    EXIF_EXPOSURE_PROGRAM_MANUAL                = 1,
    EXIF_EXPOSURE_PROGRAM_NORMAL_PROGRAM        = 2,
    EXIF_EXPOSURE_PROGRAM_APERTURE_PRIORITY     = 3,
    EXIF_EXPOSURE_PROGRAM_SHUTTER_PRIORITY      = 4,
    EXIF_EXPOSURE_PROGRAM_CREATIVE_PROGRAM      = 5,
    EXIF_EXPOSURE_PROGRAM_ACTION_PROGRAM        = 6,
    EXIF_EXPOSURE_PROGRAM_PORTRAIT_MODE         = 7,
    EXIF_EXPOSURE_PROGRAM_LANDSCAPE_MODE        = 8,
    EXIF_EXPOSURE_PROGRAM_MAX
};

/* metering mode */
enum {
    EXIF_METERING_MODE_UNKNOWN                  = 0,
    EXIF_METERING_MODE_AVERAGE                  = 1,
    EXIF_METERING_MODE_CENTER_WEIGHTED_AVERAGE  = 2,
    EXIF_METERING_MODE_SPOT                     = 3,
    EXIF_METERING_MODE_MULTISPOT                = 4,
    EXIF_METERING_MODE_PATTERN                  = 5,
    EXIF_METERING_MODE_PARTIAL                  = 6,
    EXIF_METERING_MODE_OTHER                    = 255,
    EXIF_METERING_MODE_MAX
};

/* flash bit 0 */
enum {
    EXIF_FLASH_DID_NOT_FIRE                 = 0,
    EXIF_FLASH_FIRED                        = 1
};

/* flash bit 1 & 2 - Strobe return detection*/
enum {
    EXIF_FLASH_RETURNED_LIGHT_NO_FUNCTION   = (0 << 1),
    EXIF_FLASH_RETURNED_LIGHT_RESERVED      = (1 << 1),
    EXIF_FLASH_RETURNED_LIGHT_NOT_DETECTED  = (2 << 1),
    EXIF_FLASH_RETURNED_LIGHT_DETECTED      = (3 << 1)
};

/* flash bit 3 & 4 - camera's flash mode */
enum {
    EXIF_FLASH_MODE_UNKNOWN                 = (0 << 3),
    EXIF_FLASH_MODE_COMPULSORY_ON           = (1 << 3),
    EXIF_FLASH_MODE_COMPULSORY_OFF          = (2 << 3),
    EXIF_FLASH_MODE_AUTO                    = (3 << 3)
};

/* flash bit 5 - presence of flash mode */
enum {
    EXIF_FLASH_FUNCTION_PRESENT             = (0 << 5),
    EXIF_FLASH_FUNCTION_NOT_PRESENT         = (1 << 5)
};

/* flash bit 6 - camera's red-eye mode */
enum {
    EXIF_FLASH_RED_EYE_NO_OR_UNKNOWN        = (0 << 6),
    EXIF_FLASH_RED_EYE_SUPPORTED            = (1 << 6)
};

// CALIBRATION_SHADING_LS_D65_R
static const uint8_t calibration_shading_ls_d65_r[ ] = {
    101, 98, 95, 91, 88, 85, 82, 80, 78, 77, 75, 74, 73, 73, 72, 72, 72, 73, 73, 74, 76, 77, 80, 82, 84, 87, 90, 94, 98, 103, 109, 113,
    100, 98, 94, 91, 87, 84, 81, 79, 78, 76, 75, 74, 73, 72, 72, 71, 72, 72, 72, 73, 75, 77, 79, 81, 83, 86, 89, 93, 97, 102, 108, 111,
    99, 97, 93, 90, 86, 83, 80, 78, 77, 75, 74, 73, 72, 71, 71, 71, 71, 71, 71, 72, 74, 76, 78, 80, 82, 85, 88, 92, 96, 101, 106, 110,
    98, 95, 92, 89, 85, 82, 79, 77, 76, 74, 73, 72, 71, 70, 70, 70, 70, 70, 70, 71, 73, 74, 76, 79, 81, 84, 87, 91, 95, 100, 105, 109,
    97, 94, 91, 87, 84, 81, 79, 77, 75, 73, 72, 71, 70, 69, 69, 69, 69, 69, 70, 70, 72, 73, 75, 77, 80, 83, 86, 90, 94, 98, 104, 107,
#if 1
    95, 93, 89, 86, 83, 80, 78, 76, 74, 72, 71, 70, 69, 68, 68, 68, 68, 68, 69, 70, 71, 73, 74, 77, 79, 82, 85, 89, 93, 97, 102, 106,
    95, 92, 88, 85, 82, 79, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 67, 68, 69, 70, 72, 74, 76, 78, 81, 84, 88, 92, 96, 101, 105,
    94, 91, 88, 84, 81, 79, 76, 74, 73, 71, 70, 69, 68, 67, 67, 66, 66, 67, 67, 68, 69, 71, 73, 75, 77, 80, 83, 87, 91, 96, 101, 104,
    93, 90, 87, 84, 81, 78, 76, 74, 72, 70, 69, 68, 67, 66, 66, 66, 66, 66, 66, 67, 69, 70, 72, 74, 77, 80, 83, 86, 90, 95, 100, 103,
    92, 90, 86, 83, 80, 78, 75, 73, 71, 70, 69, 68, 67, 66, 65, 65, 65, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 86, 90, 94, 99, 103,
    92, 89, 86, 83, 80, 77, 75, 73, 71, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 89, 94, 98, 102,
#else
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
#endif
    92, 89, 86, 82, 80, 77, 75, 73, 71, 69, 68, 67, 66, 65, 65, 64, 64, 65, 65, 66, 67, 69, 71, 73, 75, 78, 81, 85, 89, 93, 98, 101,
    91, 89, 85, 82, 79, 77, 74, 72, 70, 69, 68, 66, 66, 65, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 75, 78, 81, 84, 88, 93, 97, 101,
    91, 89, 85, 82, 79, 76, 74, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 84, 88, 92, 97, 101,
    91, 88, 85, 82, 79, 76, 74, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 84, 88, 92, 97, 101,
    91, 88, 85, 82, 79, 76, 74, 72, 70, 69, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 68, 70, 72, 75, 77, 80, 84, 88, 92, 97, 101,
    91, 88, 85, 82, 79, 76, 74, 72, 70, 69, 67, 66, 65, 64, 64, 64, 64, 64, 65, 65, 66, 68, 70, 72, 75, 77, 81, 84, 88, 92, 97, 101,
    91, 88, 85, 82, 79, 76, 74, 72, 70, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 65, 67, 68, 70, 72, 75, 78, 81, 84, 88, 92, 97, 101,
    91, 88, 85, 82, 79, 77, 74, 72, 71, 69, 67, 66, 65, 65, 64, 64, 64, 64, 65, 66, 67, 68, 70, 73, 75, 78, 81, 84, 88, 93, 97, 101,
    91, 89, 86, 82, 80, 77, 75, 73, 71, 69, 68, 67, 66, 65, 65, 64, 64, 65, 65, 66, 67, 69, 71, 73, 75, 78, 81, 85, 88, 93, 98, 102,
    91, 89, 86, 83, 80, 77, 75, 73, 71, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65, 66, 67, 69, 71, 73, 76, 78, 82, 85, 89, 93, 98, 102,
    92, 90, 86, 83, 80, 78, 75, 73, 72, 70, 69, 67, 66, 66, 65, 65, 65, 65, 66, 67, 68, 69, 71, 74, 76, 79, 82, 85, 89, 94, 99, 103,
    92, 90, 87, 84, 81, 78, 76, 74, 72, 70, 69, 68, 67, 66, 66, 66, 66, 66, 66, 67, 68, 70, 72, 74, 77, 79, 83, 86, 90, 94, 99, 103,
    93, 91, 88, 84, 81, 79, 76, 74, 73, 71, 70, 69, 68, 67, 66, 66, 66, 66, 67, 68, 69, 70, 72, 75, 77, 80, 83, 87, 91, 95, 100, 104,
    93, 91, 88, 85, 82, 79, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 67, 68, 68, 70, 71, 73, 75, 78, 81, 84, 88, 91, 96, 101, 105,
    94, 92, 89, 86, 83, 80, 78, 76, 74, 73, 71, 70, 69, 68, 68, 68, 68, 68, 68, 69, 70, 72, 74, 76, 79, 82, 85, 88, 92, 97, 102, 106,
    95, 93, 90, 87, 84, 81, 79, 77, 75, 73, 72, 71, 70, 69, 69, 69, 69, 69, 69, 70, 71, 73, 75, 77, 80, 83, 86, 89, 93, 98, 103, 107,
    96, 94, 91, 88, 85, 82, 80, 78, 76, 74, 73, 72, 71, 70, 70, 69, 69, 70, 70, 71, 72, 74, 76, 78, 81, 84, 87, 90, 95, 99, 105, 109,
    97, 95, 92, 89, 86, 83, 81, 79, 77, 75, 74, 73, 72, 71, 71, 70, 71, 71, 71, 72, 73, 75, 77, 79, 82, 85, 88, 92, 96, 101, 106, 110,
    98, 96, 93, 90, 87, 84, 82, 80, 78, 76, 75, 74, 73, 72, 72, 72, 72, 72, 72, 73, 74, 76, 78, 80, 83, 86, 89, 93, 97, 102, 108, 112,
    99, 97, 94, 91, 88, 86, 83, 81, 79, 77, 76, 75, 74, 73, 73, 73, 73, 73, 74, 74, 76, 77, 79, 82, 84, 87, 91, 94, 99, 104, 109, 114,
    100, 98, 95, 92, 89, 86, 84, 82, 80, 78, 77, 76, 75, 74, 74, 74, 74, 74, 75, 75, 76, 78, 80, 82, 85, 88, 91, 95, 100, 105, 111, 115 };

// CALIBRATION_SHADING_LS_D65_G
static const uint8_t calibration_shading_ls_d65_g[ ] = {
    101, 99, 95, 91, 88, 85, 82, 80, 78, 76, 75, 74, 73, 72, 71, 71, 71, 71, 72, 72, 74, 75, 77, 79, 81, 84, 86, 90, 94, 98, 103, 106,
    100, 98, 95, 91, 87, 84, 81, 79, 77, 76, 74, 73, 72, 71, 71, 70, 70, 70, 71, 72, 73, 75, 76, 78, 80, 83, 86, 89, 93, 97, 102, 106,
    99, 97, 94, 90, 86, 83, 80, 78, 76, 75, 73, 72, 71, 70, 70, 70, 70, 70, 70, 71, 72, 74, 75, 77, 79, 82, 85, 88, 92, 96, 101, 104,
    98, 96, 92, 89, 85, 82, 80, 77, 76, 74, 72, 71, 70, 70, 69, 69, 69, 69, 69, 70, 71, 73, 74, 76, 78, 81, 84, 87, 91, 95, 100, 103,
    97, 95, 91, 88, 84, 81, 79, 77, 75, 73, 72, 70, 70, 69, 68, 68, 68, 68, 68, 69, 70, 72, 73, 75, 77, 80, 83, 86, 90, 94, 99, 102,
    96, 94, 90, 86, 83, 80, 78, 76, 74, 72, 71, 70, 69, 68, 67, 67, 67, 67, 68, 68, 69, 71, 73, 75, 77, 79, 82, 85, 89, 93, 98, 101,
    95, 93, 89, 86, 83, 80, 77, 75, 73, 72, 70, 69, 68, 67, 67, 66, 66, 66, 67, 68, 69, 70, 72, 74, 76, 78, 81, 84, 88, 92, 97, 100,
    95, 92, 88, 85, 82, 79, 77, 75, 73, 71, 70, 68, 67, 67, 66, 66, 66, 66, 66, 67, 68, 70, 71, 73, 75, 78, 81, 84, 87, 92, 96, 100,
    94, 91, 88, 84, 81, 79, 76, 74, 72, 71, 69, 68, 67, 66, 66, 65, 65, 65, 66, 67, 68, 69, 71, 73, 75, 77, 80, 83, 87, 91, 95, 99,
    94, 91, 87, 84, 81, 78, 76, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66, 67, 69, 70, 72, 74, 77, 80, 83, 86, 90, 95, 98,
    93, 91, 87, 84, 81, 78, 76, 73, 72, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 76, 79, 82, 86, 90, 95, 98,
    93, 90, 87, 83, 80, 78, 75, 73, 71, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 65, 66, 68, 70, 72, 74, 76, 79, 82, 86, 90, 94, 98,
    93, 90, 86, 83, 80, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 65, 66, 68, 69, 71, 73, 76, 79, 82, 85, 90, 94, 97,
    93, 90, 86, 83, 80, 77, 75, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 79, 82, 85, 89, 94, 97,
    93, 90, 86, 83, 80, 77, 75, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 79, 82, 85, 89, 94, 97,
    93, 90, 86, 83, 80, 77, 75, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 79, 82, 85, 89, 94, 97,
    93, 90, 87, 83, 80, 78, 75, 73, 71, 69, 68, 66, 65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 73, 76, 79, 82, 85, 90, 94, 97,
    93, 90, 87, 83, 80, 78, 75, 73, 71, 69, 68, 67, 66, 65, 64, 64, 64, 64, 64, 65, 66, 68, 69, 71, 74, 76, 79, 82, 86, 90, 94, 98,
    93, 91, 87, 84, 81, 78, 76, 73, 72, 70, 68, 67, 66, 65, 65, 64, 64, 64, 65, 65, 66, 68, 70, 72, 74, 76, 79, 82, 86, 90, 95, 98,
    93, 91, 87, 84, 81, 78, 76, 74, 72, 70, 69, 67, 66, 65, 65, 65, 65, 65, 65, 65, 67, 68, 70, 72, 74, 77, 80, 83, 86, 91, 95, 99,
    94, 91, 88, 85, 82, 79, 76, 74, 72, 71, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66, 67, 69, 70, 72, 75, 77, 80, 83, 87, 91, 96, 99,
    95, 92, 89, 85, 82, 79, 77, 75, 73, 71, 69, 68, 67, 66, 66, 65, 65, 65, 66, 66, 67, 69, 71, 73, 75, 78, 81, 84, 88, 92, 96, 100,
    95, 93, 89, 86, 83, 80, 77, 75, 73, 72, 70, 69, 68, 67, 66, 66, 66, 66, 66, 67, 68, 70, 71, 74, 76, 78, 81, 85, 88, 93, 97, 101,
    96, 93, 90, 86, 83, 81, 78, 76, 74, 72, 71, 69, 68, 68, 67, 67, 66, 67, 67, 68, 69, 70, 72, 74, 77, 79, 82, 85, 89, 93, 98, 102,
    97, 94, 91, 87, 84, 81, 79, 77, 75, 73, 72, 70, 69, 68, 68, 67, 67, 67, 68, 68, 70, 71, 73, 75, 77, 80, 83, 86, 90, 94, 99, 103,
    98, 95, 92, 88, 85, 82, 80, 78, 76, 74, 72, 71, 70, 69, 69, 68, 68, 68, 69, 69, 70, 72, 74, 76, 78, 81, 84, 87, 91, 95, 100, 104,
    99, 96, 93, 89, 86, 83, 81, 78, 76, 75, 73, 72, 71, 70, 69, 69, 69, 69, 70, 70, 71, 73, 75, 77, 79, 82, 85, 88, 92, 97, 101, 105,
    100, 97, 94, 90, 87, 84, 82, 79, 77, 76, 74, 73, 72, 71, 70, 70, 70, 70, 71, 71, 72, 74, 76, 78, 80, 83, 86, 89, 93, 98, 103, 106,
    101, 99, 95, 92, 88, 85, 83, 81, 79, 77, 75, 74, 73, 72, 72, 71, 71, 71, 72, 72, 73, 75, 77, 79, 81, 84, 87, 91, 95, 99, 104, 108,
    103, 100, 96, 93, 90, 87, 84, 82, 80, 78, 77, 75, 74, 73, 73, 73, 72, 73, 73, 74, 75, 76, 78, 80, 83, 86, 89, 92, 96, 101, 106, 110,
    104, 101, 98, 94, 91, 88, 85, 83, 81, 79, 78, 76, 75, 75, 74, 74, 74, 74, 74, 75, 76, 77, 79, 81, 84, 87, 90, 94, 98, 103, 108, 112,
    105, 102, 99, 95, 92, 89, 86, 84, 82, 80, 79, 77, 76, 75, 75, 75, 75, 75, 75, 76, 77, 78, 80, 82, 85, 88, 91, 95, 99, 104, 109, 113 };


// CALIBRATION_SHADING_LS_D65_B
static const uint8_t calibration_shading_ls_d65_b[ ] = {
    97, 94, 91, 88, 85, 82, 80, 78, 76, 75, 73, 72, 71, 71, 70, 70, 70, 70, 70, 71, 72, 74, 75, 77, 78, 80, 83, 86, 89, 93, 97, 100, 96,
    94, 91, 88, 84, 81, 79, 77, 75, 74, 73, 72, 71, 70, 70, 69, 69, 69, 70, 70, 72, 73, 75, 76, 78, 80, 82, 85, 89, 92, 96, 99, 95, 93,
    90, 87, 83, 81, 78, 76, 75, 73, 72, 71, 70, 69, 69, 69, 68, 69, 69, 70, 71, 72, 74, 75, 77, 79, 82, 84, 88, 91, 95, 98, 94, 92, 89,
    86, 83, 80, 77, 75, 74, 72, 71, 70, 69, 69, 68, 68, 68, 68, 68, 69, 70, 71, 73, 74, 76, 78, 81, 84, 87, 90, 95, 98, 93, 91, 88, 85,
    82, 79, 77, 75, 73, 72, 71, 69, 69, 68, 67, 67, 67, 67, 67, 68, 69, 70, 72, 74, 75, 78, 80, 83, 86, 90, 94, 97, 92, 90, 87, 84, 81,
    78, 76, 74, 73, 71, 70, 69, 68, 67, 67, 67, 66, 66, 67, 67, 69, 70, 71, 73, 75, 77, 79, 82, 85, 89, 93, 96, 92, 89, 86, 83, 80, 78,
    76, 74, 72, 71, 69, 68, 67, 67, 66, 66, 66, 66, 66, 67, 68, 69, 71, 72, 74, 76, 79, 82, 85, 88, 92, 95, 91, 89, 85, 82, 80, 77, 75,
    73, 72, 70, 69, 68, 67, 66, 66, 65, 65, 65, 66, 66, 67, 69, 70, 72, 74, 76, 78, 81, 84, 88, 92, 95, 91, 88, 85, 82, 79, 77, 75, 73,
    71, 70, 69, 67, 67, 66, 65, 65, 65, 65, 65, 66, 67, 68, 70, 71, 73, 75, 78, 81, 84, 87, 91, 94, 90, 88, 85, 82, 79, 77, 75, 73, 71,
    69, 68, 67, 66, 65, 65, 65, 64, 64, 65, 66, 67, 68, 69, 71, 73, 75, 77, 80, 83, 87, 91, 94, 90, 88, 84, 81, 79, 76, 74, 72, 71, 69,
    68, 67, 66, 65, 65, 64, 64, 64, 65, 65, 66, 68, 69, 71, 73, 75, 77, 80, 83, 87, 90, 93, 90, 87, 84, 81, 79, 76, 74, 72, 70, 69, 68,
    67, 66, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 71, 72, 75, 77, 80, 83, 86, 90, 93, 90, 87, 84, 81, 78, 76, 74, 72, 70, 69, 68, 66,
    65, 65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 70, 72, 74, 77, 80, 83, 86, 90, 93, 90, 87, 84, 81, 78, 76, 74, 72, 70, 69, 67, 66, 65,
    65, 64, 64, 64, 64, 64, 65, 66, 67, 69, 70, 72, 74, 77, 80, 83, 86, 90, 93, 90, 87, 84, 81, 78, 76, 74, 72, 70, 69, 67, 66, 65, 65,
    64, 64, 64, 64, 64, 65, 66, 67, 68, 70, 72, 74, 77, 80, 83, 86, 90, 93, 90, 87, 84, 81, 79, 76, 74, 72, 70, 69, 67, 66, 65, 65, 64,
    64, 64, 64, 64, 65, 66, 67, 69, 70, 72, 75, 77, 80, 83, 86, 90, 93, 90, 88, 84, 81, 79, 76, 74, 72, 71, 69, 68, 66, 65, 65, 64, 64,
    64, 64, 64, 65, 66, 67, 69, 70, 73, 75, 77, 80, 83, 86, 90, 93, 90, 88, 85, 82, 79, 77, 74, 73, 71, 69, 68, 66, 66, 65, 65, 64, 64,
    64, 64, 65, 66, 67, 69, 71, 73, 75, 77, 80, 83, 87, 91, 93, 91, 88, 85, 82, 79, 77, 75, 73, 71, 69, 68, 67, 66, 65, 65, 65, 65, 64,
    65, 65, 66, 67, 69, 71, 73, 75, 78, 80, 83, 87, 91, 94, 91, 89, 85, 82, 80, 77, 75, 73, 71, 70, 68, 67, 66, 65, 65, 65, 65, 65, 65,
    65, 66, 68, 69, 71, 73, 76, 78, 81, 84, 87, 91, 94, 91, 89, 86, 83, 80, 78, 76, 74, 72, 70, 69, 68, 67, 66, 65, 65, 65, 65, 65, 66,
#if 1
    67, 68, 70, 72, 74, 76, 79, 81, 84, 88, 92, 95, 92, 90, 87, 84, 81, 78, 76, 74, 72, 71, 69, 68, 67, 66, 66, 65, 65, 65, 66, 66, 67,
    69, 70, 72, 74, 77, 79, 82, 85, 89, 93, 96, 93, 91, 87, 84, 81, 79, 77, 75, 73, 71, 70, 69, 68, 67, 66, 66, 66, 66, 66, 67, 68, 69,
    71, 73, 75, 77, 80, 82, 86, 89, 93, 96, 94, 91, 88, 85, 82, 79, 77, 75, 74, 72, 71, 69, 68, 68, 67, 67, 66, 67, 67, 68, 69, 70, 72,
    74, 76, 78, 80, 83, 86, 90, 94, 97, 95, 92, 89, 86, 83, 80, 78, 76, 74, 73, 71, 70, 69, 68, 68, 67, 67, 67, 68, 68, 69, 71, 72, 74,
    76, 79, 81, 84, 87, 91, 95, 98, 96, 93, 90, 87, 84, 81, 79, 77, 75, 74, 72, 71, 70, 69, 69, 68, 68, 68, 69, 69, 70, 72, 73, 75, 77,
    80, 82, 85, 88, 92, 96, 99, 97, 94, 91, 88, 85, 82, 80, 78, 76, 74, 73, 72, 71, 70, 69, 69, 69, 69, 69, 70, 71, 72, 74, 76, 78, 80,
#else
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
    26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26,
#endif
    83, 86, 89, 93, 97, 100, 98, 95, 92, 89, 86, 83, 81, 79, 77, 75, 74, 73, 72, 71, 70, 70, 70, 70, 70, 71, 72, 73, 75, 77, 79, 81, 84,
    87, 90, 94, 99, 102, 99, 97, 93, 90, 87, 84, 82, 80, 78, 76, 75, 74, 73, 72, 71, 71, 71, 71, 72, 72, 73, 74, 76, 78, 80, 82, 85, 88,
    92, 96, 100, 103, 100, 98, 95, 91, 88, 85, 83, 81, 79, 77, 76, 75, 74, 73, 73, 72, 72, 72, 73, 73, 74, 76, 77, 79, 81, 84, 86, 89, 93,
    97, 102, 105, 101, 99, 96, 93, 89, 87, 84, 82, 80, 79, 77, 76, 75, 74, 74, 74, 73, 74, 74, 75, 75, 77, 78, 80, 82, 85, 88, 91, 94, 99,
    103, 107, 102, 100, 97, 93, 90, 88, 85, 83, 81, 79, 78, 77, 76, 75, 75, 74, 74, 74, 75, 75, 76, 77, 79, 81, 83, 86, 89, 92, 95, 100, 104, 108 } ;

#endif
